package com.sunni.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyInterceptor1 implements HandlerInterceptor {
    // 执行顺序 ：

    // 1.执行(controller层) 目标方法 之前。
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle111 running...");
        // return false; // 1.2. 是否放行

        // 如果不放行，就可以request转发或重定向 到其他方法
        String param = request.getParameter("param");
        if ("yse".equals(param)){
            return true;
        }else {
            request.getRequestDispatcher("/view/error.jsp").forward(request,response); //跳转到其他方法
            return false; // 原访问不放行
        }
    }

    // 2.执行(controller层) 目标方法。(return"xx.jsp" 跳转页面之前的代码都执行)

    // 3.执行(controller层) 目标方法一半,return跳转页面之前。 (执行完controller目标方法，在return 跳转视图之前。执行下这个方法)
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle111 running...");

        // 3.2. 把(controller层)目标方法的 modelAndView，里的数据改了。
        modelAndView.addObject("username","Sunni And Amiee");
    }

    // 4.执行完(controller层)目标方法，执行这个方法。
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion111 running...");
    }
}
